﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIMCFachadaNegocio;
using SIMCObjetoNegocio;

namespace SIMCPresenter
{
    public interface IPrincipalPresenterView : ISeguridadPrincipalView
    {
        event EventHandler<EventArgs> BuscarRoles;
        event EventHandler<EventArgs> CambiarRol;
        event EventHandler<EventArgs> Iniciar;

        IList<SIMCObjetoNegocio.Rol> ListaRoles { set; }
                     
        string CodigoRolSeleccionado { get; }
        string DescripcionRolSeleccionado { get; }
        bool EsPorDefecto { get;}
        bool EsUsuarioConClaveTemporal { get; }
        bool PuedeCambiarRol { set; }
        bool PuedeVerMenuPricipal { set; }          
    }

    public interface ISeguridadPrincipalView : ISeguridadView
    {
        bool PuedeVerMenuPortafolio { set; }
        bool PuedeVerMenuOrdenes { set; }
        bool PuedeVerMenuAdministracion { set; }  
    }

    public class PrincipalPresenter : PresenterSeguridadBase
    {
        private IPrincipalPresenterView mView;        
        private FachadaSeguridad fachadaSeguridad;

        public PrincipalPresenter(IPrincipalPresenterView view)
            : base(view)
        {
            this.mView = view;
            this.fachadaSeguridad = new FachadaSeguridad();
            this.Initialize();
          
        }

        private void Initialize()
        {
            this.mView.BuscarRoles += new EventHandler<EventArgs>(mView_BuscarRoles);
            this.mView.CambiarRol += new EventHandler<EventArgs>(mView_CambiarRol);
            this.mView.Iniciar += new EventHandler<EventArgs>(mView_Iniciar);
        }

        protected override void EvaluarPermisos()
        {
            mView.PuedeVerMenuPortafolio = PermitirEvento(SegDiccionario.e_WebMaster_Portafolio, 
                SegDiccionario.d_WebMaster_Portafolio);
            mView.PuedeVerMenuOrdenes = PermitirEvento(SegDiccionario.e_WebMaster_Ordenes, 
                SegDiccionario.d_WebMaster_Ordenes);
            mView.PuedeVerMenuAdministracion = PermitirEvento(SegDiccionario.e_WebMaster_Administracion,
                SegDiccionario.d_WebMaster_Administracion);
        }

        void mView_CambiarRol(object sender, EventArgs e)
        {
            try
            {
                if (mView.EsPorDefecto)
                {
                    fachadaSeguridad.ActualizarRolPorDefecto(mView.IdUsuario, mView.CodigoRolSeleccionado);
                }

                mView.RolUsuario.Id = mView.CodigoRolSeleccionado;

                mView.RolUsuario.Descripcion = mView.DescripcionRolSeleccionado;
            }
            catch (Exception ex)
            {
                mView.MostrarMensaje(ex.Message, false);
            }
        }

        private void mView_BuscarRoles(object sender, EventArgs e)
        {
            try
            {
                mView.PuedeCambiarRol = true;
                mView.ListaRoles = fachadaSeguridad.BuscarListaRol(mView.IdUsuario);                
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                mView.MostrarMensaje(ex.Message, false);
            }
        }

        private void mView_Iniciar(object sender, EventArgs e) 
        {
            try
            {                 
                if (mView.EsUsuarioConClaveTemporal) 
                {
                    mView.PuedeVerMenuPricipal = false;
                }

                mView.PuedeCambiarRol = false;
                IniciarSeguridad();     
            }
            catch (Exception ex) 
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                mView.MostrarMensaje(ex.Message, false);
            }
        }        
    }
}
